Audio/video from internet direct to compact disc through web browser

ABSTRACT

Apparatus and method for allowing a user to acquire and record information from the Internet may comprise a user interface that allows the user to identify at least one information service on the Internet that provides desired information and to select a desired completion time. A scheduler operatively associated with the user interface calculates a launch time to allow the desired information to be downloaded and recorded in its entirety before the desired completion time. A recording dispatcher operatively associated with the scheduler and the user interface begins downloading at the launch time the desired information from the information service. A recorder operatively associated with the recording dispatcher records the desired information to a recording medium.

CROSS-REFERENCE TO RELATED APPLICATION

[0001] This is a continuation of co-pending U.S. patent application Ser.No. 09/146,711, filed on Sep. 3, 1998, which is incorporated herein byreference for all that it discloses.

FIELD OF INVENTION

[0002] The present invention pertains generally to Internet services,and more particularly, to a system and method for allowing a user toselect and download audio/visual tracks from the Internet and to recordthem directly onto a CD via a web browser for later retrieval.

BACKGROUND

[0003] The proliferation of the World Wide Web through the Internet hasmade available a wealth of information with nearly instantaneous accesstime. Much of the information available is in multimedia (i.e., audioand/or video) format, including music tracks and news reports. Themultimedia content may be completely dynamic, being updated daily,hourly, or even broadcast live.

[0004] It is often convenient to capture a selection of various tracksavailable over the Internet on a local portable media for laterplayback. With the availability now of writable compact discs (CDs) andthe massive user base of CD players already in use, it would bedesirable to provide a system and method for allowing a user to selectand download various audio/visual tracks from the Internet and to recordthem directly onto a CD for later retrieval.

[0005] Depending on the size and format of the multimedia track, thebandwidth of the user's Internet connection, and the amount of trafficon the Internet at the time of download, the process required invisiting a service site, downloading a requested track, and listening toor watching the downloaded track may be time-consuming and/orinconvenient.

[0006] Accordingly, a need also exists for a system and method forselecting audio/video tracks from Internet multimedia service providers,automatically downloading the selected tracks, and writing thedownloaded tracks to a CD for later retrieval by the user. It would alsobe convenient to provide a method for setting up a profile specifyingthe tracks and time desired, and having the CD created automaticallywithout user intervention.

SUMMARY OF THE INVENTION

[0007] Apparatus for allowing a user to acquire and record informationfrom the Internet may comprise a user interface that allows the user toidentify at least one information service on the Internet that providesthe desired information and to select a desired completion time. Ascheduler operatively associated with the user interface calculates alaunch time to allow the desired information from the informationservice to be downloaded and recorded in its entirety before the desiredcompletion time. A recording dispatcher operatively associated with thescheduler and the user interface begins downloading at the launch timethe desired information from the information service. A recorderoperatively associated with the recording dispatcher records the desiredinformation to a recording medium.

[0008] Also disclosed is a method for allowing a user to acquire andrecord information from the Internet that comprises the steps of:Retrieving a user profile that identifies at least one informationservice on the Internet the provides the desired information, the userprofile also including a desired completion time; calculating a launchtime to allow the desired information from the information service to bedownloaded and recorded in its entirety before the desired completiontime; initiating at the launch time the downloading of the desiredinformation from the information service; and recording onto a storagemedium the downloaded desired information from the information service.

BRIEF DESCRIPTION OF THE DRAWING

[0009] The invention will be better understood from a reading of thefollowing detailed description taken in conjunction with the drawing inwhich like reference designators are used to designate like elements,and in which:

[0010]FIG. 1 is a block diagram of a system in accordance with theinvention;

[0011]FIG. 2 is an illustrative embodiment of a user interface inaccordance with the invention; and

[0012]FIG. 3 is a flowchart of a method of the invention.

DETAILED DESCRIPTION OF THE INVENTION

[0013]FIG. 1 is a block diagram of a system 100 in accordance with theinvention. In system 100, a computer 102 running a create CD application106 in accordance with the invention via an Internet browser 104downloads user selected audio/video tracks from the World Wide Web 120over an Internet connection 122. The user selects tracks from a list ofavailable services, displayed by a user interface of application 106, inany desired combination and order. Application 106 schedules theselected downloaded tracks for recording to CD 112 in CD writer 110. Atthe scheduled time, the selected downloaded tracks are written to CD 112via a communication interface 114. Once the CD 112 is recorded, the usermay play back the contents of the CD on any CD drive compatible with theparticular medium of CD 112. To initially obtain the create CDapplication 106, a user navigates, via the user's Internet browser 104,to a web site that allows the user to download the create CD application106 and downloads the application. When the user launches a CD writeoperation from browser 104, a user interface is presented that allowsthe user to select audio/video tracks from multimedia service providers.

[0014]FIG. 2 is an illustrative embodiment of a user interface 200displayed within the user's Internet browser 104 in accordance with theinvention. As shown, user interface 200 includes a list of availableservices 202 and a list of selected services 204. The list of availableservices 202 includes a list of audio/video tracks made available byservice providers. The list of available services 202 is typicallyconfigured by the provider of the user interface 200. Accordingly, theuser interface 200 may vary from provider to provider, along with theservices available through their user interface 200.

[0015] User interface 200 includes adding means 206 for allowing theuser to select tracks from the list of available services 202 and theorder in which to record them. In the illustrative embodiment, addingmeans 206 is implemented with an Active X Control button labeled “Add.”The user moves the mouse or cursor over the desired service in the listof available services 202 so that the selected track is highlighted onthe user display, and then clicks the “Add” button. The selected trackthen appears in the list of selected services 204.

[0016] In the illustrative embodiment, user interface 200 includesremoval means 208, implemented with an Active X Control button labeled“Remove,” that allows the user to remove a selection by moving the mouseor cursor over the desired track in the list of selected services 204such that the desired track becomes highlighted, and then clicking on“Remove” button. The highlighted track then disappears from the list ofselected services 204 and is not included to be recorded when the CD iscreated. All selected tracks may be removed from the list of selectedservices 204 via a “Clear All” button 210.

[0017] User interface 200 also includes writing means 212 that causesthe tracks listed in the list of selected services 204 to be written tothe CD media. In the illustrative embodiment, writing means 212 isimplemented as an Active X Control button labeled “Write Disc Now” thatlaunches a write CD write operation. The write CD operation (not shown)handles the communication interface between the user's computer and theCD writer drive.

[0018] Preferably, user interface 200 includes scheduling means 214 toallow the user to schedule the tracks in the list of selected services204 to be written to CD. In the illustrative embodiment, schedulingmeans 214 is an Active X Control button labeled “Schedule,” which whenclicked on, launches a scheduling application. One application that thescheduling feature is particularly useful in is as a personal newsrecorder for making custom news and information discs. In thisapplication, the user selects a number and order of available servicesdesired such as the evening news, stock quotes, and entertainment news,then selects a desired ready time that the disc should be ready forpick-up, and activates the scheduling means 214 by clicking on the“Schedule” button. Scheduling means 214 launches a scheduling operationthat schedules the download of the user-selected tracks and the time tolaunch the write operation for writing the tracks to the CD, such thatthe CD will be ready at the desired ready time. Thus, the CD isautomatically created in the user-customized format without hands-onintervention and is ready for the user at his/her convenience. Theuser-customized profile (selected services, order, and desired readytime) may be scheduled to create a disc as often as the user desires.

[0019] User interface 200 may include additional features such as theability to add or configure the list of available services. In theillustrative embodiment, this feature is provided by an Active X Controlbutton 216 labeled “Add New Service,” which launches asetup/configuration application when activated. Other features mayinclude help facilities 218, information facilities 220 about theproduct or company, a link 222 to the provider's home web page, andmore.

[0020] The illustrative embodiment of user interface 200 also providespreviewing means 224, implemented as Active X Control button labeled“Preview.” Previewing means 224 allows the user to highlight a trackfrom the list of available services 202 and then activate the previewingmeans 224 to listen to or watch the highlighted audio/video track (or aportion of it) before deciding whether or not to add it to the list ofselected services 204.

[0021] One application that this feature is particularly useful in is ina music retriever application. For example, a recording company may actas a service provider and supply a list of available audio tracks as thelist of available services 202. Using the previewing means 224, the usermay listen to a portion of a track in the list of available services 202before adding it to the list of selected services which will be writtento CD. Thus, the user can preview the track before writing it to CD inorder to prevent unnecessary writing to the CD of those tracksultimately not wanted.

[0022]FIG. 3 is a flowchart of the steps taken by a user to perform themethod of the invention. Initially, the create CD application must beinstalled on the user's system. This is performed either in a step 302by navigating to a website that offers the create CD application fordownload and then downloading and installing the application on theuser's system in step 304. Alternatively, the application may beprovided on an install CD that is provided by the CD drivemanufacturer/supplier. In the preferred embodiment, the application isprovided in a Microsoft format “.cab” file, implemented as an ActiveXcontrol that resides on an HTML web page of a web site. A cabinet is asingle file created using Lempel-Ziv compression to hold a number ofcompressed files, and is used to save space and time during softwaredistribution. During installation of a program, the compressed files ina cabinet are decompressed and copied to an appropriate directory forthe user. In operation, the user navigates to the web site where theapplication is offered, and clicks on an HTML icon to download thecreate CD application. The cab file is then downloaded to the user'scomputer where it automatically unzips and decompresses itself andlaunches the user interface. As an alternative, in a Netscape Navigatorenvironment, the application may be implemented as a plug-in.

[0023] Once the application is installed on the user's system, the userlaunches the application as part of the local Internet browser in a step308. This step may be performed automatically when the create CDapplication is installed, or may be performed manually by the user byclicking on an icon associated with the application on the desktop orwithin a program. Launching the application brings up the user interfaceof the application on a page (e.g., user interface 200 of FIG. 2) withinthe user's browser. Once the user interface is displayed, the user maythen add new services in step 312. Adding new services is performed byactivating a configuration application which registers the URL of anauthorized multimedia service provider with the application. Theauthorization of an multimedia service provider is typically obtainedvia an authorization code provided by prior agreement between themultimedia service provider and application vendor.

[0024] The user selects services from the list of available services (ordeselects services from the list of selected services) in step 310. Thecontent of the available services is provided by the server side of themultimedia track providers' web site. In the illustrative embodiment,the format of the multimedia services content is a RealAudio® “.ra” filecaptured to a “.wav” file. Service providers that wish to make theirservices available via the create CD application may be required tosupport a particular services content file format specified by thecreate CD application developer, or alternatively, the create CDapplication may include a file format converter that converts a numberof file formats to the particular format that is written to the CD.Thus, for example, when a “.ra” audio/video track is downloaded from aservice provider, the application may be implemented to convert the“.ra” track to a “.wav” file before writing the track to the CD. Oneembodiment may include a virtual sound card configured to convertaudio/video tracks into a format that can be written to a CD. The userthen directs the application to write the disk immediately in step 314,or sets up the scheduler to schedule the write to the disk in step 316.In one implementation, the source (URL), time and/or size, data type,and other conversion or calculation parameters associated with aselected service are registered in a registration file which the writeapplication reads when it is launched. If the disk is to be writtenimmediately via step 314, the registration file is passed as a parameterto the write application. The write application downloads each selectedtrack designated in the registration file and then writes eachdownloaded track to the CD 112 in the CD writer 110 via thecommunication interface 114. In the preferred embodiment, communicationinterface 114 is a SCSI interface communicating via calls to AdaptecEasy-CD Toolkit (XCD) library, version 2.0, manufactured by Adaptec,Inc. The programmer's references are detailed in Adaptec Easy-CD Toolkit(XCD) 2.0, Part #: 100023—Manual revision: (G rev/Jan. 19, 1996), Jan.20, 1997.

[0025] If the write to the CD is to be scheduled in step 316 for a latertime, the user launches the scheduling application. Preferably, thescheduling application prompts the user for a desired completion timeand is passed the registration file as a parameter. Then, schedulingapplication calculates how long the download and write to the CD willtake based on the size, data type and sampling rates, modem speed,average network load for the requested time of day, and other systemparameters or parameters contained the registration file to determine atime to launch the write application. Scheduling application thenschedules the write application for that time. When the scheduled timearrives, the write application is launched, which downloads the selectedtracks and writes them out to the CD writer drive in step 318.

[0026] Appendix A is an illustrative embodiment of an example userinterface control file for a personal news recorder application of thecreate CD application of the invention. The user interface isimplemented in Microsoft® Visual Basic. Section 1 of Appendix A defineseach of the user interface boxes and command buttons, which include themain window of the personal news recorder, the operation status list,the preview timer, the preview command button, the help text box, thevisit vendor picture box, the selected services list box, the availableservices list box, the write disc now command button, the schedulecommand button, the add new service command button, the clear allcommand button, the remove selected service command button, the addselected service command button, the help timer, the about this programcommand button, the help command button, the “available services” and“selected services” labels, and the borders and outlines. Section 2 ofAppendix A contains the constant definitions and variable and externalAPI declarations. For example, external API's for playing sound“WINMM.DLL” and for writing a wave file to CD “WRITEWAV.DLL” aredeclared in this section. Section 3 of Appendix A includes pseudocodefor the subroutines associated with the user interface. These includeroutines for disabling all command buttons, enabling all commandbuttons, recording a track, responding to a click on the “About thisProgram” command button, adding a track to the selected services list inresponse to a click on the “Add” command button, responding to a clickon the “Add New Service” command button, clearing the entire selectedservices list in response to a click on the “Clear” command button,responding to a click on the “Help” command button, responding to aclick on the “Preview” command button, responding to a click on the“Remove” command button, responding to a click on the “Schedule” commandbutton, and writing to the CD in response to a click on the “Write CDNow” command button. Each of the subroutines may call external routinesto accomplish its action. For example, the routine WriteDiscNow_Click( )calls external API writewav( ), a C implementation of the code used towrite to the CD writer.

[0027] Appendix B is an illustrative embodiment of the C implementationfor API writewav( ) which handles the writing out of tracks to the CDwriter drive. Writewav( ) links in the Adaptec Easy-CD Toolkit (XCD)library, version 2.0, manufactured by Adaptec, Inc., that allows it tocommunicate with the CD writer via a SCSI interface.

[0028] The implementation is an instance of the user interface windowdefined in Appendix A. The instance is created via an ActiveX controland displayed within the Internet browser. The ActiveX control handlesall of the processing of user input mouse clicks through the proceduresdefined in the Visual Basic code in Appendix A.

[0029] Although the invention has been described in terms of theillustrative embodiments, it will be appreciated by those skilled in theart that various changes and modifications may be made to theillustrative embodiments without departing from the spirit or scope ofthe invention. It is intended that the scope of the invention not belimited in any way to the illustrative embodiment shown and describedbut that the invention be limited only by the claims appended hereto.APPENDIX A Section 1 Begin VB.UserControl PersonalNewsRecorder BackColor= &H00C0C0C0& ClientHeight = 5895 ClientLeft = 0 ClientTop = 0ClientWidth = 9120 ForeColor = &H00000000& PropertyPages =“pnr.ctx”:0000 ScaleHeight = 5895 ScaleWidth = 9120 Begin VB.ListBoxOperationStatusList BackColor = &H00000000& ForeColor = &H00FFFFFF&Height = 4770 Left = 1800 TabIndex = 19 Top = 240 Visible = 0  ′FalseWidth = 4935 End Begin VB.Timer PreviewTimer Enabled = 0  ′FalseInterval = 500 Left = 1320 Top = 0 End Begin VB.CommandButton PreviewBackColor = &H00C0C0C0& Caption = “Preview” Height = 495 Left = 3240TabIndex = 18 ToolTipText = “Preview the currently highlighted selectionfrom the list of available services” Top = 960 Width = 975 End BeginVB.TextBox HelpText BackColor = &H00FF0000& ForeColor = &H00FFFFFF&Height = 735 Index = 4 Left = 6000 MultiLine = −1  ′True TabIndex = 16Text = “pnr.ctx”:0004 Top = 4320 Visible = 0  ′False Width = 1815 EndBegin VB.PictureBox VisitHP Appearance = 0  ′Flat BackColor =&H80000005& ForeColor = &H80000008& Height = 855 Left = 2400 Picture =“pnr.ctx”:004D ScaleHeight = 825 ScaleWidth = 6465 TabIndex = 17ToolTipText = “Visit HP to find out more about cool new products,including the HP Surestore CD- Writer 6020i” Top = 4800 Width = 6495 EndBegin VB.TextBox HelpText BackColor = &H0000FFFF& ForeColor =&H00000000& Height = 285 Index = 3 Left = 6360 MultiLine = −1  ′TrueTabIndex = 15 Text = “pnr.ctx”:13C5F Top = 3480 Visible = 0   ′FalseWidth = 1575 End Begin VB.TextBox HelpText BackColor = &H0000FFFF&ForeColor = &H00000000& Height = 285 Index = 2 Left = 5040 MultiLine =−1  ′True TabIndex = 14 Text = “pnr.ctx”:13C79 Top = 1920 Visible =0  ′False Width = 1575 End Begin VB.TextBox HelpText BackColor =&H0000FFFF& ForeColor = &H00000000& Height = 285 Index = 1 Left = 360MultiLine = −1  ′True TabIndex = 13 Text = “pnr.ctx”:13C93 Top = 1320Visible = 0  ′False Width = 2535 End Begin VB.TextBox HelpText BackColor= &H0000FFFF& ForeColor = &H00000000& Height = 495 Index = 0 Left = 2520MultiLine = −1  ′True TabIndex = 12 Text = “pnr.ctx”:13CB7 Top = 480Visible = 0  ′False Width = 2895 End Begin VB.ListBox SelectedListBackColor = &H00808080& BeginProperty Font Name = “MS Sans Serif” Size =8.25 Charset = 0 Weight = 700 Underline = 0  ′False Italic = 0  ′FalseStrikethrough = 0  ′False EndProperty ForeColor = &H0000FFFF& Height =3795 Left = 4440 TabIndex = 11 ToolTipText = “Click on a service tohighlight it” Top = 600 Width = 2775 End Begin VB.ListBox AvailableListBackColor = &H00808080& BeginProperty Font Name = “MS Sans Serif” Size =8.25 Charset = 0 Weight = 700 Underline = 0  ′False Italic = 0  ′FalseStrikethrough = 0  ′False EndProperty ForeColor = &H0000FFFF& Height =3795 Left = 240 TabIndex = 10 ToolTipText = “Click on a service tohighlight it” Top = 600 Width = 2775 End Begin VB. CommandButtonWriteDiscNow BackColor = &H00C0C0C0& Caption = “Write Disc Now”DownPicture = “pnr.ctx”:13CFC Height = 735 Left = 7440 Picture =“pnr.ctx”:1413E Style = 1  ′Graphical TabIndex = 7 ToolTipText = “Writea disc now containing the selected services” Top = 3600 Width = 1455 EndBegin VB.CommandButton Schedule BackColor = &H00C0C0C0& Caption =“Schedule” DownPicture = “pnr.ctx”:14580 Height = 735 Left = 7440Picture = “pnr.ctx”:149C2 Style = 1  ′Graphical TabIndex = 6 ToolTipText= “Schedule the download and disc write for a later time” Top = 2640Width = 1455 End Begin VB. CommandButton AddNewService BackColor =&H00C0C0C0& Caption = “Add New Service” Height = 855 Left = 7440 Picture= “pnr.ctx”:14E04 Style = 1  ′Graphical TabIndex = 5 ToolTipText = “Adda new service to the list of available services” Top = 840 Width = 1455End Begin VB.CommandButton Clear BackColor = &H00C0C0C0& Caption =“Clear All” Height = 495 Left = 3240 TabIndex = 4 ToolTipText = “Clearall entries from the list of selected services” Top = 3600 Width = 975End Begin VB.CommandButton Remove BackColor = &H00C0C0C0& Caption = “<-Remove” Height = 495 Left = 3240 TabIndex = 3 ToolTipText = “Remove thehighlighted service from the list of selected services” Top = 2520 Width= 975 End Begin VB.CommandButton Add BackColor = &H00C0C0C0& Caption =“Add ->” Height = 495 Left = 3240 TabIndex = 2 ToolTipText = “Add thehighlighted service to the list of selected services” Top = 1920 Width =975 End Begin VB.Timer HelpTimer Enabled = 0  ′False Interval = 3000Left = 720 Top = 0 End Begin VB.CommandButton About BackColor =&H00C0C0C0& Caption = “About” DownPicture = “pnr.ctx”:155FE Height = 855Left = 1320 Picture = “pnr.ctx”:15A40 Style = 1  ′Graphical TabIndex = 1ToolTipText = “General information about this program” Top = 4800 Width= 975 End Begin VB.CommandButton Help BackColor = &H00C0C0C0& Caption =“Help” DownPicture = “pnr.ctx”:15E82 Height = 855 Left = 240 Picture =“pnr.ctx”:162C4 Style = 1  ′Graphical TabIndex = 0 ToolTipText = “Quickinstructions on how to use this program” Top = 4800 Width = 975 EndBegin VB.Timer InitTimer Interval = 1 Left = 120 Top = 0 End BeginVB.Label AvailableServices BackColor = &H00C0C0C0& Caption = “AvailableServices” ForeColor = &H00000000& Height = 255 Left = 960 TabIndex = 9Top = 240 Width = 1455 End Begin VB.Label SelectedServices BackColor =&H00C0C0C0& Caption = “Selected Services” ForeColor = &H00000000& Height= 255 Left = 5160 TabIndex = 8 Top = 240 Width = 1335 End Begin VB.LineSeparator BorderColor = &H00000000& X1 = 240 X2 = 8880 Y1 = 4680 Y2 =4680 End Begin VB.Shape Outline BackColor = &H00C0C0C0& BorderColor =&H00000000& Height = 5655 Left = 120 Top = 120 Width = 8895 End EndSection 2 Attribute VB_Name = “PersonalNewsRecorder” AttributeVB_GlobalNameSpace = False Attribute VB_Creatable = True AttributeVB_PredeclaredId = False Attribute VB_Exposed = True ′  Debug flag#Const DebugFlag = False ′  Constants Const MaxAvailable = 1000 ConstMaxSelected = 99 Const SND_SYNC = &H0 ′ For multimedia (sound) API ConstSND_ASYNC = &H1 Const SND_NODEFAULT = &H2 Const SND_LOOP = &H8 ConstSND_NOSTOP = &H10 Const CD_OK = 0 ′ For Ron's CD-R lib functions ConstHPWebSite = “http://www.hp.com/isgsupport/cdr/pi/index.html” ′  Globals:-) Dim CurrentIndex As Integer Dim CurrentSound As String DimWelcomeSound As String Dim HelpSound As String Dim SilentSound As StringDim Descriptor(MaxAvailable) As String Dim FileName(MaxAvailable) AsString Dim CurrentTrack As String Dim CloseFlag As Long ′  External APIdeclarations Private Declare Function sndPlaySound Lib “WINMM.DLL” Alias_(—)   “sndPlaySoundA” (ByVal 1pszSoundName As String, ByVal uFlags As_(—)   Long) As Long Private Declare Function CD_Write Lib“WRITEWAV.DLL” Alias _(—)   “writewav” (ByVal 1pszWaveName As String,ByVal CloseFlag As Long) _(—)   As Long Section 3 ′  Disable all commandbuttons Private Sub DisableButtons() Preview.Enabled = False Add.Enabled= False Remove.Enabled = False Clear.Enabled = FalseAddNewService.Enabled = False Schedule.Enabled = FalseWriteDiscNow.Enabled = False Help.Enabled. = False About.Enabled = FalseVisitHP.Enabled = False End Sub ′  Enable all command buttons PrivateSub EnableButtons() Preview.Enabled = True Add.Enabled = TrueRemove.Enabled = True Clear.Enabled = True AddNewService.Enabled = TrueSchedule.Enabled = True WriteDiscNow.Enabled = True Help.Enabled = TrueAbout.Enabled = True VisitHP.Enabled = True End Sub ′  Start recording atrack. This uses a blocking call. Private Sub RecordTrack() #IfDebugFlag = True Then MsgBox “RecordTrack: Starting write operation”,vbInformation, “DEBUG” #End If x& = CD_Write(CurrentTrack, CloseFlag)#If DebugFlag = True Then MsgBox “RecordTrack: Write operationcompleted, retcode = ” + Str(x&), vbInformation, “DEBUG” #End If OnError Resume Next Kill CurrentTrack On Error GoTo 0 If x& <> CD_OK ThenMsgBox “Bad news. CD Write failed (“ + Str(x&) +”) .”, vbCritical,“Write error” OperationStatusList.Clear OperationStatusList.Visible =False SelectedList.Clear UserControl.MousePointer = vbDefaultEnableButtons Else CurrentIndex = CurrentIndex + 1 #If DebugFlag = TrueThen MsgBox “RecordTrack: CurrentIndex is ” + Str(CurrentIndex),vbInformation, “DEBUG” #End If If CurrentIndex >= SelectedList.ListCountThen OperationStatusList.AddItem “Closing session”OperationStatusList.Refresh CurrentTrack = “” x& =CD_Write(CurrentTrack, CloseFlag) If x& <> CD_OK Then MsgBox “Badnews. CD Close Session failed (“ + Str(x&) + ”) .”, vbCritical, “Closesession error” Else MsgBox “Disc successfully written”, vbInformation,“Disc done” End If OperationStatusList.Clear OperationStatusList.Visible= False SelectedList.Clear UserControl.MousePointer = vbDefaultEnableButtons Else OperationStatusList.AddItem “Downloading ” +Descriptor (SelectedList.ItemData (CurrentIndex))OperationStatusList.Refresh UserControl.AsyncRead FileName(SelectedList.ItemData (CurrentIndex)), VbAsyncTypeFile, “RecordTrack” +Str (SelectedList.ItemData (CurrentIndex)) End If End If End Sub ′  Whenthe user clicks on About, we display a msgbox with ′  info about theprogam. Private Sub About_Click() s$ = “Personal News Recorder” + Chr$(10) + Chr$ (13) + Chr$ (10) + Chr$(13) s$ = s$ + “This demonstrationprogram presents an interface and working prototype for retrieval ofnews information directly from the web to a CD- Writer.  ” s$ = s$ +“The program is an ActiveX component delivered to your system fromwithin the web browser environment.” MsgBox s$, , “About the PersonalNews Recorder” End Sub ′  When the user clicks “add”, add the item tothe selected list. Private Sub Add_Click() If AvailableList.ListIndex >=0 Then If SelectedList.ListCount < MaxSelected Then SelectedList.AddItemDescriptor (AvailableList.List Index)SelectedList.ItemData(SelectedListListcount − 1) =AvailableList.ListIndex Else MsgBox “Sorry, you can only select up to” + Str(MaxSelected) + “ services.”, vbInformation, “Too many selectedservices” End If Else MsgBox “Highlight an available service, then clickAdd to add it to the list of selected services.”, vbInformation,“Nothing highlighted” End If End Sub ′  Add new service Private SubAddNewService_Click() ′ Register new service MsgBox “Allow the user toadd new items to the list of available services.”, vbInformation, “AddNew Services” End Sub ′  When the user clicks “clear” clear the entireselected list. Private Sub Clear_Click() If SelectedList.ListCount > 0Then SelectedList.Clear Else MsgBox “There are no selected services toclear!”, vbInformation, “No selected services” End If End Sub ′  Whenthe user clicks Help, we place the first help pointers ′  on the screen,then start the help autotimer. Private Sub Help_Click()HelpText(0).Visible = True wFlags% = SND_ASYNC Or SND_NODEFAULT x% =sndPlaySound(Helpsound, wFlags%) HelpTimer.Enabled = True End Sub ′ Whena Help is “in progress”, each time the help timer ticks ′ we set thenext help queue card for the user to view. Private Sub HelpTimer_Timer()If HelpText(0).Visible = True Then HelpText(0).Visible = FalseHelpText(1).Visible = True wFlags% = SND_ASYNC Or SND_NODEFAULT x% =sndPlaySound(Helpsound, wFlags%) ElseIf HelpText(1).Visible = True ThenHelpText(1).Visible = False HelpText(2).Visible = True wFlags% =SND_ASYNC Or SND_NODEFAULT x% = sndPlaySound(Helpsound, wFlags%) ElseIfHelpText(2).Visible = True Then HelpText(2).Visible = FalseHelpText(3).Visible = True wFlags% = SND_ASYNC Or SND_NODEFAULT x% =sndPlaySound(Helpsound, wFlags%) ElseIf HelpText(3).Visible = True ThenHelpText(3).Visible = False HelpText(4).Visible = True wFlags% =SND_ASYNC Or SND_NODEFAULT x% = sndPlaySound(HelpSound, wFlags%) ElseIfHelpText(4).Visible = True Then HelpText(4).Visible = FalseHelpTimer.Enabled = False End If End Sub ′  Initialization timer. Readsin the .ini file asynchronously. Private Sub InitTimer_Timer()InitTimer.Enabled = False DisableButtons UserControl.MousePointer =vbHourglass #If DebugFlag = True Then MsgBox “Reading ini file”, ,“DEBUG” #End If UserControl.AsyncRead “pnr.ini”, VbAsyncTypeFile,“IniFile” End Sub ′  When the user clicks “preview” go get the currentlyselected ′  sound file and play it. If a sound is already playing, this′  button is labeled “stop”, so stop the current sound by playing ′  the“silent” wave. Actually playing a short, empty wave is ′  necessary toforce the waveform device to free up the current ′  open wave file :-)Private Sub Preview_Click() If Preview.Caption = “Preview” Then IfAvailableList.ListIndex >= 0 Then UserControl.MousePointer = vbHourglassUserControl.AsyncRead FileName(AvailableList.ListIndex),VbAsyncTypeFile, “PreviewSound” Else MsgBox “You must first highlight aservice from the list of available services by clicking on it. Thenpress Preview to hear a preview of the service.”, , “Make a selection”Exit Sub End If Preview.Caption = “Stop” Preview.ToolTipText = “Stop thecurrently playing preview” Else PreviewTimer.Enabled = False wFlags% =SND_NODEFAULT x% = sndPlaySound(Silentsound, wFlags%) Preview.Caption =“Preview” Preview.ToolTipText = “Preview the currently highlightedselection from the list of available services” On Error Resume Next KillCurrentSound On Error GoTo 0 End If End Sub ′  This timer polls to seeif the preview is finished playing. ′  (An alternative way to do thiswould be to check the waveform ′  device status, but couldn't seem toget that to work right from ′  w/in Visual Basic.) ′  If the preview isdone, clean up by resetting the button to ′  say “Preview” and erasingthe current preview sound file. Private Sub PreviewTimer_Timer() ′  Tryto play a silent sound with SND_NOSTOP flag set. This ′  will onlysucceed if the current sound is finished playing. wFlags% =SND_NODEFAULT Or SND_NOSTOP x% = sndPlaySound(Silentsound, wFlags%)′  Return code non-zero indicates the sound played OK, therefore ′  weknow that the preview must have been finished! If x% <> 0 ThenPreviewTimer.Enabled = False Preview.Caption = “Preview”Preview.ToolTipText = “Preview the currently highlighted selection fromthe list of available services” On Error Resume Next Kill CurrentSoundOn Error GoTo 0 End If End Sub ′  When the user clicks “remove” weremove the selected item. Private Sub Remove_Click() IfSelectedList.ListIndex >= 0 Then SelectedList.RemoveItemSelectedList.ListIndex Else MsgBox “You must first highlight a selectedservice, then click Remove.”, vbInformation, “No selected service” EndIf End Sub ′  Schedule write to CD Private Sub Schedule_Click() ′ Callexternal scheduler routine. MsgBox “This feature is not implemented inthis prototype. In a real product, this would allow the user to schedulea recording for some time later.”, vbInformation, “Schedule” End SubPrivate Sub UserControl_Terminate() On Error Resume Next KillWelcomeSound Kill HelpSound Kill CurrentSound Kill SilentSound On ErrorGoTo 0 End Sub ′ When the user clicks the “Visit HP” link, we navigateto ′ the HP Web Site defined by our constant. If a sound is playing, ′we stop it first by playing the “silent” wave. If no sound ′ wasplaying, that's OK anyway since the wave is short & silent! Private SubVisitHP_Click() wFlags% = SND_NODEFAULT x% = sndPlaySound(SilentSound,wFlags%) UserControl.Hyperlink.NavigateTo HPWebSite End Sub ′ All asyncreads generate an event here at completion. ′ This more or lessimplements a crude state machine to ′ drive completion of the sequenceof async read events ′ necessary to load a whole set of files forrecording. Private Sub UserControl_AsyncReadComplete(AsyncProp AsAsyncProperty) ′  State: IniFile ′  Read in the IniFile. Should adderror handling someday :-) If AsyncProp.PropertyName = “IniFile” Then#If DebugFlag = True Then MsgBox “State: IniFile”, , “DEBUG” #End IfOpen AsyncProp.Value For Input As #1 Input #1, WelcomeSound Input #1,HelpSound Input #1, SilentSound i = 0 While EOF(1) <> True Input #1,Descriptor(i) AvailableList.AddItem Descriptor(i) Input #1, FileName(i)i = i + i Wend Close #1 Kill AsyncProp.Value UserControl.AsyncReadWelcomeSound, VbAsyncTypeFile, “WelcomeSound” ′  State: WelcomeSoundElseIf Left$ (AsyncProp.PropertyName, Len(“WelcomeSound”)) =“WelcomeSound” Then #If DebugFlag = True Then MsgBox “State:WelcomeSound”, , “DEBUG” #End If WelcomeSound = AsyncProp.Value wFlags%= SND_ASYNC Or SND_NODEFAULT x% = sndPlaySound(WelcomeSound, wFlags%)UserControl.AsyncRead HelpSound, VbAsyncTypeFile, “HelpSound” ′  State:HelpSound ElseIf Left$ (AsyncProp.PropertyName, Len(“HelpSound”)) =“HelpSound” Then #If DebugFlag = True Then MsgBox “State: HelpSound”, ,“DEBUG” #End If HelpSound = AsyncProp.Value UserControl.AsyncReadSilentSound, VbAsyncTypeFile, “SilentSound” ′  State: SilentSound ElseIfLeft$ (AsyncProp.PropertyName, Len(“SilentSound”)) = “SilentSound” Then#If DebugFlag = True Then MsgBox “State: SilentSound”, , “DEBUG” #End IfSilentSound = AsyncProp.Value EnableButtons UserControl MousePointer =vbDefault ′  State: PreviewSound ElseIf Left$ (AsyncProp.PropertyName,Len (“PreviewSound”)) = “PreviewSound” Then #If DebugFlag = True ThenMsgBox “State: PreviewSound”, , “DEBUG” #End If UserControl.MousePointer= vbDefault CurrentSound = AsyncProp.Value wFlags% = SND_ASYNC OrSND_NODEFAULT x% = sndPlaySound(CurrentSound, wFlags%)PreviewTimer.Enabled = True ′  State: RecordTrack ′    Erase the tmpfile for track we just recorded (null first time, no harm) ′    Startrecording track. When done, we'll start the next download. ElseIf Left$(AsyncProp.PropertyName, Len(“RecordTrack”)) = “RecordTrack” Then #IfDebugFlag = True Then MsgBox “State: RecordTrack”, , “DEBUG” #End If OnError Resume Next Kill CurrentTrack On Error GoTo 0 CurrentTrack =AsyncProp.Value i = Val (Right$(AsyncProp.PropertyName,Len(AsyncProp.PropertyName) - Len(“RecordTrack”)))OperationStatusList.AddItem “Writing ” + Descriptor (i)OperationStatusList.Refresh RecordTrack ′  State: Unknown ′    Statemachine hurls Else MsgBox ”Huh? Unknown state (” +AsyncProp.PropertyName + ”)“+ ” . . .state machine hurls. . .”,VbExclamation, “Really Bad Error” End If End Sub ′  When the user isready to write a disc, first make sure there ′  are selected services.Then bring up the operation status display ′  and let 'er rip! PrivateSub WriteDiscNow_Click() ′  Make sure they selected some stuff IfSelectedList.Listcount > 0 Then ′  Disable buttons DisableButtons ′  Seeif they want to close the disc when done. ′  (Someday might want to addthis to an options screen!) ′If MsgBox(“Do you want to close the discwhen it's done writing? If you answer Yes, you'll be able to play thedisc in any audio CD player (including a computer CD-ROM) but you won'tbe able to add anything to the disc later. If you answer No, you'll onlybe able to play the disc on a computer CD-ROM, however you can add morematerial to the CD later and close it at that time.”, vbInformation +vbYesNo, “Close disc?”) = vbYes Then ′  CloseFlag = 1 ′Else ′  CloseFlag= 0 ′End If CloseFlag = 0 ′  Make sure they want to go ahead! IfMsgBox(“Please make sure you have recordable media inserted in thedrive. Then press OK to proceed.” + Chr$(10) + Chr$(13) + Chr$(10) +Chr$(13) + “(In a real product, we could give an option here forprinting jewel case artwork.)”, vbInformation + vbOKCancel, “Preparemedia and confirm”) = vbCancel Then EnableButtons Exit Sub End If ′ Makethe operation status box & cancel button visibleOperationStatusList.Visible = True ′ Begin download of files fromselected list. For now, ′  we have single threaded state machine enginewhich just ′  downloads a file, then records it, then repeats for the′  next file. Right here, we just kick it off by starting the′  download of the first file. Current Index = 0OperationStatusList.AddItem “Downloading ” +Descriptor(SelectedList.ItemData(CurrentIndex))OperationStatusList.Refresh UserControl.MousePointer = vbHourglassUserControl.AsyncRead FileName(SelectedList.ItemData(CurrentIndex)),VbAsyncTypeFile, “RecordTrack” +Str(SelectedList.ItemData(CurrentIndex)) ′  Send 'em to help if nothingselected. Else MsgBox “You must first selected services that you want torecord! Press Help for more information.”, , “Select services” Exit SubEnd If End Sub

[0030] APPENDIX B #include <windows.h> #include “xcd.h” BOOL WINAPIDllMain (HANDLE hModule, DWORD fdwReason, LPVOID lpReserved) { switch(fdwReason) { case DLL_PROCESS_ATTACH: /* Code from LibMain insertedhere. Return TRUE to keep the DLL loaded or return FALSE to fail loadingthe DLL. You may have to modify the code in your original LibMain toaccount for the fact that it may be called more than once. You will getone DLL_PROCESS_ATTACH for each process that loads the DLL. This isdifferent from LibMain which gets called only once when the DLL isloaded. The only time this is critical is when you are using shared datasections. If you are using shared data sections for statically allocateddata, you will need to be careful to initialize it only once. Check yourcode carefully. Certain one-time initializations may now need to be donefor each process that attaches. You may also not need code from youroriginal LibMain because the operating system may now be doing it foryou. */ break; case DLL_THREAD_ATTACH: /* Called each time a thread iscreated in a process that has already loaded (attached to) this DLL.Does not get called for each thread that exists in the process before itloaded the DLL. Do thread-specific initialization here. break; caseDLL_THREAD_DETACH: /* Same as above, but called when a thread in theprocess exits. Do thread-specific cleanup here. */ break; caseDLL_PROCESS_DETACH: /* Code from _WEP inserted here. This code may (likethe LibMain) not be necessary. Check to make certain that the operatingsystem is not doing it for you. break; } /* The return value is onlyused for DLL_PROCESS_ATTACH; all other conditions are ignored. */ returnTRUE; // successful DLL_PROCESS_ATTACH } //_declspec( dllexport )_declspec (dllexport) DWORD _stdcall writewav(LPCSTR filename, longcloseflag) { HXCD hXcd; UINT32 u32Error,u32Err; DRVTABLE DriveTable[16]; INT32 i32DriveCount = 16; RECORDTRACK RecordTrack; intdriveselect; BOOLEAN fCloseDisc; u32Error = XcdNewInstance(&hXcd); //u32Error should == XCD_NOERR which is = 0 if(u32Error != XCD_NOERR) {u32Err = XcdDeselectDrv(hXcd); // Cleanup u32Err =XcdDeleteInstance(hXcd); // Cleanup return u32Error; }; u32Error =XcdScanDrv(hXcd, DriveTable, &i32DriveCount); if(u32Error != XCD_NOERR){ u32Err = XcdDeselectDrv(hXcd); // Cleanup u32Err =XcdDeleteInstance(hXcd); // Cleanup return u32Error; }; if(i32DriveCount == 0) { return XCD_UNEXPECTED-1; }; driveselect = 0; //while(strncmp((DriveTable[driveselect]).szDescription, “HP”, 2)) { //driveselect++; // if (driveselect >= i32DriveCount) { returnXCD_UNEXPECTED;}; // } u32Error = XcdSelectDrv(hXcd, &DriveTable[driveselect]); // Select the first cd- writer if(u32Error != XCD_NOERR){ u32Err = XcdDeselectDrv(hXcd); // Cleanup u32Err =XcdDeleteInstance(hXcd); // Cleanup return u32Error; }; u32Error =XcdTestUnitReady(hXcd); if(u32Error != XCD_NOERR) { u32Err =XcdDeselectDrv(hXcd); // Cleanup u32Err = XcdDeleteInstance(hXcd); //Cleanup return u32Error; }; memset (&RecordTrack, 0,sizeof(RECORDTRACK)); RecordTrack.fOnTheFly = FALSE; // Not using a VCDRecordTrack.u32Type = XCD_WAVE; // PCM Wave Audio file formatRecordTrack.u32Action = XCD_RECWRITE; // Perform a speed test only(XCD_RECTEST) RecordTrack.fDiscAtOnce = FALSE; // Want TRACK AT ONCERecordTrack.u32SessionType = XCD_CLOSECDDA; // Only audio tracksRecordTrack.u32Speed = XCD_SPEED2X; // select speed (2 times) fCloseDisc= FALSE; if (closeflag) fCloseDisc = TRUE; if (strlen(filename) == 0) {u32Error = XcdCloseSession (hXcd, XCD_CLOSECDDA, fCloseDisc , NULL);if(u32Error != XCD_NOERR) { u32Err = XcdDeselectDrv(hXcd); // Cleanupu32Err = XcdDeleteInstance(hXcd); // Cleanup return u32Error; }; } else{ strcpy (RecordTrack.szTrackFileName, filename); u32Error =XcdRecord(hXcd, &RecordTrack, NULL); // Do it! if(u32Error != XCD_NOERR){ u32Err = XcdDeselectDrv(hXcd); // Cleanup u32Err =XcdDeleteInstance(hXcd); // Cleanup return u32Error; }; } u32Error =XcdDeselectDrv(hXcd); // Cleanup if(u32Error != XCD_NOERR) { returnu32Error; }; u32Error = XcdDeleteInstance(hXcd); // Cleanup if(u32Error!= XCD_NOERR) { return u32Error; }; return (u32Error); }

What is claimed is:
 1. A method for allowing a user to acquire andrecord information from the Internet, comprising: retrieving a userprofile, said user profile comprising an identification of at least oneinformation service on the Internet, the at least one informationservice on the Internet providing desired information, said user profilealso comprising a desired completion time; calculating a launch time toallow the desired information from the at least one information serviceon the Internet to be downloaded and recorded in its entirety before thedesired completion time; initiating at the launch time the downloadingof the desired information from the at least one information service onthe Internet; and recording onto a storage medium the downloaded desiredinformation from the at least one information service on the Internet.2. The method of claim 1, wherein said recording step comprisesrecording onto a portable medium the downloaded desired information fromthe at least one information service on the Internet.
 3. The method ofclaim 2, wherein said recording onto a portable medium comprises thestep of recording onto a CD the downloaded desired information from theat least one information service on the Internet.
 4. The method of claim1, further comprising providing a user interface, said user interfaceallowing the user to create said user profile.
 5. The method of claim 1,wherein the desired information from the at least one informationservice on the Internet is periodically changed.
 6. The method of claim1, comprising periodically repeating said retrieving step through saidrecording step using said user profile.
 7. The method of claim 1,wherein said desired completion time comprises a plurality of completiontimes defined by a schedule.
 8. The method of claim 7, comprisingrepeating said calculating step through said recording step for each ofsaid plurality of completion times defined by said schedule. 9.Apparatus for allowing a user to acquire and record information from theInternet, comprising: a user interface responsive to user input, saiduser interface allowing the user to create a user profile, said userprofile comprising an identification of at least one information serviceon the Internet, the at least one information service on the Internetproviding desired information, said user profile also comprising adesired completion time; a scheduler operatively associated with saiduser interface, said scheduler calculating a launch time to allow thedesired information from the at least one information service on theInternet to be downloaded and recorded in its entirety before thedesired completion time; a recording dispatcher operatively associatedwith said scheduler and said user interface, said recording dispatchercausing the desired information from the at least one informationservice to be downloaded at said launch time; and a recorder operativelyassociated with said recording dispatcher, said recorder recording thedownloaded desired information onto a recording medium.
 10. Theapparatus of claim 9, wherein said recording medium comprises a portablemedium.
 11. The apparatus of claim 10, wherein said portable mediumcomprises a CD.
 12. Apparatus for allowing a user to acquire and recordinformation from the Internet, comprising: user interface means forallowing the user to identify at least one information service on theInternet, the at least one information service on the Internet providingdesired information, and to select a desired completion time; schedulingmeans operatively associated with said user interface means forcalculating a launch time to allow the desired information from the atleast one information service on the Internet to be downloaded andrecorded in its entirety before the desired completion time; recordingdispatcher means operatively associated with said scheduling means andsaid user interface means for initiating at said launch time a downloadof the desired information from the at least one information service onthe Internet; and recording means operatively associated with saidrecording dispatcher means for recording the downloaded desiredinformation.
 13. The apparatus of claim 12, wherein said recording meanscomprises a portable medium recorder for recording onto a portablemedium the downloaded desired information.
 14. The apparatus of claim13, wherein said portable medium comprises a CD.
 15. A method forallowing a user to acquire and record information from the Internet,comprising: determining a user profile, said user profile comprising anidentification of desired information available from the Internet, saiduser profile also comprising a desired completion time; calculating alaunch time to allow the desired information to be downloaded from theInternet and recorded in its entirety before the desired completiontime; initiating at the launch time the downloading of the desiredinformation from the Internet; and recording onto a storage medium thedownloaded desired information from the Internet.
 16. The method ofclaim 15, wherein the user profile includes an identification of aninformation service on the Internet, the information service on theInternet providing the desired information.
 17. The method of claim 16,wherein said recording step comprises recording on a portable medium thedownloaded desired information from the Internet.
 18. The method ofclaim 17, wherein said recording on a portable medium comprises the stepof recording onto a CD the downloaded desired information from theInternet.
 19. The method of claim 15, further comprising providing auser interface, said user interface allowing the user to create saiduser profile.
 20. The method of claim 19, comprising periodicallyrepeating said retrieving step through said recording step using saiduser profile.